package main

import (
	"ubt-gin-admin/app/pkg/conf"
	"ubt-gin-admin/app/pkg/cors"
	"ubt-gin-admin/app/pkg/db"
	"ubt-gin-admin/app/pkg/logger"
	"ubt-gin-admin/app/pkg/route"
	"ubt-gin-admin/app/utils"

	"github.com/gin-gonic/gin"
)

func main() {
	// 初始化配置文件的读取
	// 本地环境
	// mac环境下开启/home目录创建文件夹，sudo vim /etc/auto_master 注释/home一行，到根目录下，sudo automount 即可创建文件夹
	// 正式环境
	conf.InitConf("/home/ubt/apps/ubt-gin-admin/config/config.yml")

	// 初始化日志组件
	logger.InitLog()
	logger.Info("日志组件初始化成功！")

	// 初始化路由
	gin.SetMode(conf.Conf.AppConf.Env)
	app := gin.New()
	app.Use(gin.Recovery())
	app.ForwardedByClientIP = true

	// 加载跨域处理
	app.Use(cors.Cors)
	// 记录错误日志
	app.Use(logger.Recover)

	// 初始化Redis数据库
	app.Use(db.Redis)
	logger.Info("缓冲Redis组件初始化成功！")

	logger.Info("路由组件初始化成功！")
	// // 设置受信任代理,如果不设置默认信任所有代理，不安全
	err := app.SetTrustedProxies([]string{"127.0.0.1"})
	if err != nil {
		logger.Error("路由配置失败。" + err.Error())
		return
	}
	// 初始化PostgreSQL数据库
	db.InitPgsql()
	logger.Info("数据库初始化PostgreSQL数据库组件初始化成功！")

	// 注册路由
	route.RegRoutes(app)

	logger.Info("服务【" + conf.Conf.AppConf.Host + ":" + conf.Conf.AppConf.Port + "】启动成功！")
	err = app.Run(conf.Conf.AppConf.Host + ":" + conf.Conf.AppConf.Port)
	if err != nil {
		logger.Error("服务启动失败。" + err.Error())
		return
	}
}

// 生成代码，运行时，将上面的main改名，再将下面的改为main
func main2() {
	// 1、定义需要的变量，注意大小写，根据实际业务表进行修改
	var (
		tableName  = "info_keyword"
		packName   = "info"
		className  = "InfoKw"
		StructName = "infoKw"
		fileName   = "kw"
		headName   = "Kw"
	)

	// 2、生成代码
	utils.GenCode(tableName, packName, className, StructName, fileName, headName)
}
